package com.ftg.learn.chapter10;

import java.util.Arrays;

/**
 * 迁移问题
 *  {1,2,3,4,5,6,7,8}
 *  {1,2,3,4}
 * @author KangJx
 * @date 2021/7/16
 */
public class ArrayInit {

    /**
     * {1,2,3,4,5}
     * 把数组arr里面的元素下标小于target的元素迁移新数组里
     * @param arr
     * @param target
     */
    public int[] moveVal(int[] arr,int target){
        //自己分析下，如果 target - 数时反向迁移
        //如果 方法是 Arr begin end
        if(target ==0){
            return arr;
        }
        if(target < 0){
            return moveVal(arr,arr.length + target,arr.length);
        }
        int[] reArr = new int[target > arr.length ? arr.length: target];
        for(int i = 0,len = reArr.length;i < len;i++){
            reArr[i] = arr[i];
        }
        return reArr;
    }

    /**
     * [begin,end)
     * @param arr
     * @param begin
     * @param end
     * @return
     */
    public int[] moveVal(int[] arr,int begin,int end){
        if(begin - end  > 0 || end > arr.length){
            //异常 err- 1001 : 。。。。。
            return arr;
        }
        int[] reArr = new int[end - begin];
        for(int i = 0 ,len  = reArr.length;i < len;i++){
            reArr[i] = arr[begin + i];
        }
        return reArr;
    }

    /**
     * int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;
     * 	要求将以上数组中值为0的项去掉，将不为0的值存入一个新的数组，生成的新数组为：
     * 		int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5} ;
     * 思路：生活中的问题解决 = 程序中的解决；
     * 	1、	确定出不为0的个数，这样可以开辟新数组；
     * 	2、	从旧的数组之中，取出内容，并将其赋给新开辟的数组；
     */
    public void yi(){
        System.out.println("实验8第2题结果");
        int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
        System.out.println("原数组："+Arrays.toString(oldArr));
        int n = 0;
        //找出0的个数
        for(int i = 0;i< oldArr.length;i++){
            if( oldArr[i] == 0 ){
                n++;
            }
        }
        //把原数组不为0的值赋值给新数组
        int num = 0;
        int[] newArr = new int[oldArr.length-n];
        for(int i = 0 ; i < oldArr.length;i++){
            if(oldArr[i] != 0){
                newArr[num++] = oldArr[i];
            }
        }
        System.out.println("抽取0后的新数组："+Arrays.toString(newArr));
    }
    /**
     *现在给出两个数组：
     * 	· 数组A：{1，7，9，11，13，15，17，19}
     * 	· 数组b：{2，4，6，8，10}
     *       两个数组合并为数组c，按升序排列。
     * 	主要的目的是熟悉这两个操作的方法，数组扩大，必须要将原始数组的内容拷贝进去。
     */
    public void er(int[] arr1,int[] arr2){
        System.out.println("实验8第3题结果");
        System.out.println("原数组A："+Arrays.toString(arr1));
        System.out.println("原数组B："+Arrays.toString(arr2));
        //定义新数组
        int[] arr3 = new int[arr1.length+ arr2.length];
        //原数组A的值赋值给新数组C
        for(int i = 0 ; i<arr1.length;i++){
            arr3[i] = arr1[i];
        }
        //原数组B的值赋值给新数组C   (下标位置初始为原数组A的length)
        for(int i = 0;i< arr2.length;i++){
            arr3[arr1.length+i] = arr2[i];
        }
        //升序排序
        Arrays.sort(arr3);
        //输出新数组
        System.out.println("AB合并排序后的数组："+Arrays.toString(arr3));
    }

    /**
     * 将一个给定的整型数组转置输出，
     * 	例如：	源数组，1 2 3 4 5 6
     * 			转置之后的数组，6 5 4 3 2 1
     */
    public void san(int[] arr){
        System.out.println("实验8第1题结果");
        //原数组
        System.out.println("原数组："+Arrays.toString(arr));
        //倒置
        for(int i = 0;i< arr.length/2;i++){
            int t = arr[arr.length-i-1];
            arr[arr.length-i-1] = arr[i];
            arr[i] = t;
        }
        //倒置后的结果为
        System.out.println("新数组："+Arrays.toString(arr));
    }

}
